/**
 * Author: yuechao
 * 
 * Time: 2011-5-11 上午11:16:53
 *  
 * 查询条件集合，如果加添加空的条件不处理
 * 
 */
package com.wontube.core.dao.mybatis;

import java.util.ArrayList;
import java.util.List;

public class Criteria {
	protected List<Criterion> criteria = new ArrayList<Criterion>();

	public boolean isValid() {
		return this.criteria.size() > 0;
	}

	public List<Criterion> getAllCriteria() {
		return this.criteria;
	}

	public List<Criterion> getCriteria() {
		return this.criteria;
	}

	/**
	 * 添加与条件
	 * 
	 * @param condition
	 *            条件表达式
	 * @return
	 */
	public Criteria addCriterion(String condition) {
		if (condition == null) {
			return this;
		}
		this.criteria.add(new Criterion(condition));

		return this;
	}

	/**
	 * 添加与条件
	 * 
	 * @param condition
	 *            条件
	 * @param value
	 *            比较值
	 * @return
	 */
	public Criteria addCriterion(String condition, Object value) {
		if (value == null) {
			return this;
		}

		this.criteria.add(new Criterion(condition, value));

		return this;
	}
	
	/**
	 * 添加like与条件，不区分大小写。
	 * 
	 * 注意，权限于postgresql数据库
	 * 
	 * @param colName
	 *            数据库中的列名
	 * @param value
	 *            比较值
	 * @return
	 */
	public Criteria addILikeCriterion(String colName, String value) {
		if (value == null) {
			return this;
		}

		String condition = colName + " ilike";
		value = "%" + value + "%";

		this.criteria.add(new Criterion(condition, value));

		return this;
	}

	/**
	 * 添加like与条件
	 * 
	 * @param colName
	 *            数据库中的列名
	 * @param value
	 *            比较值
	 * @return
	 */
	public Criteria addLikeCriterion(String colName, String value) {
		if (value == null) {
			return this;
		}

		String condition = colName + " like";
		value = "%" + value + "%";

		this.criteria.add(new Criterion(condition, value));

		return this;
	}

	/**
	 * 添加between与条件
	 * 
	 * @param condition
	 *            条件
	 * @param value1
	 *            左值
	 * @param value2
	 *            右值
	 * @return
	 */
	public Criteria addCriterion(String condition, Object value1, Object value2) {
		if (value1 == null || value2 == null) {
			return this;
		}

		this.criteria.add(new Criterion(condition, value1, value2));

		return this;
	}
}
